import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
import { ElMessage } from 'element-plus';

// 定义接口返回数据的格式
interface ApiResponse<T = any> {
  code: number;
  message: string;
  data: T;
}

// 创建请求类
class Request {
  private instance: AxiosInstance;

  constructor(config: AxiosRequestConfig) {
    this.instance = axios.create(config);

    // 请求拦截器
    this.instance.interceptors.request.use(
      (config: InternalAxiosRequestConfig) => {
        // 在发送请求之前做一些处理，例如添加 token
        const token = localStorage.getItem('token');
        if (token) {
          config.headers.Authorization = `Bearer ${token}`;
        }
        return config;
      },
      (error) => {
        return Promise.reject(error);
      }
    );
  }

  // 封装 GET 请求
  public get<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
    return this.instance.get(url, config);
  }

  // 封装 POST 请求
  public post<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {
    return this.instance.post(url, data, config);
  }

  // 封装 PUT 请求
  public put<T>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {
    return this.instance.put(url, data, config);
  }

  // 封装 DELETE 请求
  public delete<T>(url: string, config?: AxiosRequestConfig): Promise<T> {
    return this.instance.delete(url, config);
  }
}

// // 默认配置
// const defaultConfig: AxiosRequestConfig = {
//   baseURL: 'http://localhost:8888/',
//   timeout: 10000, // 请求超时时间
//   headers: {
//     'Content-Type': 'application/json',
//   },
// };

// // 创建请求实例
// const request = new Request(defaultConfig);


// 用户服务
const userServiceConfig: AxiosRequestConfig = {
  baseURL: 'http://localhost:8888/', // 用户服务的地址
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
  },
};

export const userRequest = new Request(userServiceConfig);

// 知识库服务
const knowledgeBaseServiceConfig: AxiosRequestConfig = {
  baseURL: 'http://localhost:8887/', // 知识库服务的地址
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
  },
};

export const knowledgeBaseRequest = new Request(knowledgeBaseServiceConfig);

// 问答服务
const chatServiceConfig: AxiosRequestConfig = {
  baseURL: 'http://localhost:8886/', // 问答服务的地址
  timeout: 10000000,
  headers: {
    'Content-Type': 'application/json',
  },
};


export const chatRequest = new Request(chatServiceConfig);
